/*
* test for rule shouldUseLocal
*
*/

const ProxyServerUtil = require('./util/ProxyServerUtil.js');
const { proxyGet, generateUrl } = require('./util/HttpUtil.js');
const Server = require('./server/server.js');
const { printLog } = require('./util/CommonUtil.js');

const rule = require('./test_rules/shouldUseLocalResponseRule.js');
const expectedLocalBody = 'handled_in_local_response';


testWrapper('http');
testWrapper('https');

function testWrapper(protocol, ) {
    describe('Rule shouldUseLocalResponse should be working in :' + protocol, () => {
        let proxyServer ;
        let serverInstance ;

        beforeAll((done) => {
            jasmine.DEFAULT_TIMEOUT_INTERVAL = 2000000;
            printLog('Start server for rule_shouldUseLocalResponse_spec');

            serverInstance = new Server();

            proxyServer = ProxyServerUtil.proxyServerWithRule(rule);

            setTimeout(function() {
                done();
            }, 2000);
        });

        afterAll(() => {
            serverInstance && serverInstance.close();
            proxyServer && proxyServer.close();
            printLog('Close server for rule_shouldUseLocalResponse_spec');

        });

        it('Should use local response if the assertion is true', done => {
            const url = generateUrl(protocol, '/test/uselocal');
            proxyGet(url, {})
                .then(res => {
                    expect(res.body).toEqual(expectedLocalBody);
                    expect(res.headers['via-proxy-local']).toEqual('true');
                    done();
                }, error => {
                    console.log('error happened in proxy get for shouldUseLocal: ',error);
                    done.fail('error happened when test shouldUseLocal rule');
                });

        });
    });
}
